Skip to main content

Quizzes

A comprehensive system for managing quizzes, question banks, attempts, and grading workflows with modular, testable components.

πŸ—‚οΈ Folder Structure​

quizzes/
β”œβ”€β”€ abilities/ # CASL policies for quiz, question, attempt, and bank permissions
β”‚ β”œβ”€β”€ attemptAbilities.ts
β”‚ β”œβ”€β”€ questionAbilities.ts
β”‚ β”œβ”€β”€ questionBankAbilities.ts
β”‚ └── quizAbilities.ts
β”œβ”€β”€ classes/ # DTO validators and response transformers
β”‚ β”œβ”€β”€ validators/ # Input schemas: QuizValidators, QuestionValidators, AttemptValidators
β”‚ └── transformers/ # Output schemas and mappers: QuizResponse, QuestionData, AttemptResult
β”œβ”€β”€ controllers/ # API endpoints
β”‚ β”œβ”€β”€ QuizController.ts # Create, retrieve, update, delete quizzes
β”‚ β”œβ”€β”€ QuestionBankController.ts # Manage question banks and import/export
β”‚ β”œβ”€β”€ QuestionController.ts # CRUD for individual questions
β”‚ β”œβ”€β”€ AttemptController.ts # Handle quiz attempts, submissions, and retrieval
β”œβ”€β”€ interfaces/ # TypeScript contracts
β”œβ”€β”€ question-processing/ # Pluggable question logic
β”‚ β”œβ”€β”€ QuestionProcessor.ts # Core pipeline for rendering and grading
β”‚ β”œβ”€β”€ graders/ # Individual grading strategies (multiple choice, free text)
β”‚ β”œβ”€β”€ renderers/ # Question renderers for different formats
β”‚ β”œβ”€β”€ tag-parser/ # Parses custom tags in question text
β”‚ └── validators/ # Business-rule validators for question consistency
β”œβ”€β”€ services/ # Business logic
β”‚ β”œβ”€β”€ QuizService.ts # Orchestrates quiz creation, versioning, and deletion
β”‚ β”œβ”€β”€ QuestionBankService.ts # Bank import, export, and search
β”‚ β”œβ”€β”€ QuestionService.ts # Manages individual question lifecycle
β”‚ └── AttemptService.ts # Evaluates submissions, calculates scores, tracks progress
β”œβ”€β”€ utils/ # Shared functions (e.g., pagination, randomization)
β”œβ”€β”€ container.ts # Binds controllers, services, repos, and abilities using InversifyJS
β”œβ”€β”€ types.ts # DI symbols for all components in module
└── tests/ # Unit and integration tests

🎯 Component Responsibilities​

  • Controllers: Expose RESTful endpoints; validate input via DTOs; enforce CASL policies via @Authorized and ability decorators.
  • Services: Contain core business workflowsβ€”quiz lifecycle, bank management, question operations, attempt grading and scoring.
  • Repositories: Abstract MongoDB operations for quizzes, questions, banks, and attempts; support transactions and pagination.
  • Abilities: Define fine-grained access rules for CRUD operations and attempt submissions.
  • Question Processing: Modular pipeline to render questions, parse custom tags, validate business rules, and apply grading strategies.
  • Interfaces & Types: Ensure type-safe contracts for grading algorithms, repository methods, and DTOs.
  • Dependency Injection: container.ts binds interfaces to implementations using Inversify’s @injectable and @inject, promoting loose coupling and easy testing.

πŸ” Interaction Flow​

  1. Quiz Definition: Instructors create quizzes and attach question banks via QuizController.
  2. Question Management: Questions authored via QuestionController, validated, and stored in banks.
  3. Attempt Lifecycle: Students initiate attempts (AttemptController), answers processed through AttemptService using QuestionProcessor.
  4. Scoring & Feedback: Graders compute scores; results persisted and accessible to users.
  5. Integration: Module interacts with Auth for user identity, Users for progress tracking.